name: i18n - Download Client UI
on:
  workflow_dispatch:
  schedule:
    # runs Monday and Wednesday at 12:15 PM UTC
    - cron: '15 12 * * 1,3'

env:
  GITHUB_TOKEN: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}
  CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_CAMPERBOT_SERVICE_TOKEN }}
  CROWDIN_API_URL: 'https://freecodecamp.crowdin.com/api/v2/'
  CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID_CLIENT }}

jobs:
  i18n-download-client-ui-translations:
    name: Client
    runs-on: ubuntu-22.04

    steps:
      - name: Checkout Source Files
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          token: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}

      - name: Generate Crowdin Config
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'generate-config'
          PROJECT_NAME: 'client'

      ##### Download Chinese #####
      - name: Crowdin Download Chinese Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: zh-CN
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      # Convert Simplified Chinese to Traditional #
      - name: Convert Chinese
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'convert-chinese'
          FILE_PATHS: '["client/i18n/locales/chinese"]'

      ##### Download Espanol #####
      - name: Crowdin Download Espanol Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: es-EM
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Italian #####
      - name: Crowdin Download Italian Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: it
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Brazilian Portuguese #####
      - name: Crowdin Download Portuguese (Brazilian) Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: pt-BR
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

          ##### Download Ukrainian #####
      - name: Crowdin Download Ukrainian Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: uk
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Japanese #####
      - name: Crowdin Download Japanese Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: ja
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download German #####
      - name: Crowdin Download German Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: de
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Arabic #####
      - name: Crowdin Download Arabic Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false
          # downloads
          download_translations: true
          download_language: ar
          skip_untranslated_files: false
          export_only_approved: true
          push_translations: false
          # pull-request
          create_pull_request: false
          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}
          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Swahili #####
      - name: Crowdin Download Swahili Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: sw
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Korean #####
      - name: Crowdin Download Korean Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: ko
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ###### Format JSON #####
      # Crowdin gives the files read-only permissions, so we first have to allow
      # writes.
      - name: Format JSON
        run: |
          sudo chown -R $(whoami): client/i18n/locales
          npx --yes prettier --write client/i18n/locales/**/*.json

      # Create Commit
      - name: Commit Changes
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'commit-changes'
          GH_USERNAME: 'camperbot'
          GH_EMAIL: ${{ secrets.ACTIONS_CAMPERBOT_EMAIL }}
          GH_BRANCH: 'i18n-sync-client'
          GH_MESSAGE: 'chore(i18n,client): processed translations'

      # Generate PR #
      # All languages should go ABOVE this. #

      - name: Create PR
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'pull-request'
          GH_TOKEN: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}
          BRANCH: 'i18n-sync-client'
          REPOSITORY: 'freecodecamp/freecodecamp'
          BASE: 'main'
          TITLE: 'chore(i18n,client): processed translations'
          BODY: 'This PR was opened auto-magically by Crowdin.'
          LABELS: 'crowdin-sync'
          TEAM_REVIEWERS: 'i18n'
